package com.easy.service;

import com.easy.bean.MessageBean;
import com.easy.util.Page;

import java.util.List;

/**
 * 消息服务接口
 */
public interface MessageService {

    /**
     * 发送消息
     * @param message 消息对象
     * @return 发送成功返回true，否则返回false
     */
    boolean sendMessage(MessageBean message);

    /**
     * 删除消息
     * @param id 消息ID
     * @return 删除成功返回true，否则返回false
     */
    int deleteMessage(Integer id);

    /**
     * 更新消息
     * @param message 消息对象
     * @return 更新成功返回true，否则返回false
     */
    boolean updateMessage(MessageBean message);

    /**
     * 根据ID获取消息
     * @param id 消息ID
     * @return 消息对象
     */
    MessageBean getMessageById(Integer id);

    /**
     * 分页查询接收者的消息
     * @param receiverId 接收者ID
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 分页消息列表
     */
    Page getMessagesByReceiverId(Integer receiverId, Integer pageNum, Integer pageSize);

    /**
     * 根据类型分页查询接收者的消息
     * @param receiverId 接收者ID
     * @param msgType 消息类型
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 分页消息列表
     */
    Page getMessagesByTypeAndReceiver(Integer receiverId, String msgType, Integer pageNum, Integer pageSize);

    /**
     * 获取接收者的未读消息数量
     * @param receiverId 接收者ID
     * @return 未读消息数量
     */
    int getUnreadCount(Integer receiverId);

    /**
     * 按类型获取接收者的未读消息数量
     * @param receiverId 接收者ID
     * @param msgType 消息类型
     * @return 未读消息数量
     */
    int getUnreadCountByType(Integer receiverId, String msgType);

    /**
     * 标记消息为已读
     * @param ids 消息ID列表
     * @return 标记成功返回true，否则返回false
     */
    boolean markMessagesAsRead(List<Integer> ids);

    /**
     * 标记接收者的所有消息为已读
     * @param receiverId 接收者ID
     * @return 标记成功返回true，否则返回false
     */
    boolean markAllMessagesAsRead(Integer receiverId);

    /**
     * 标记接收者某类型的所有消息为已读
     * @param receiverId 接收者ID
     * @param msgType 消息类型
     * @return 标记成功返回true，否则返回false
     */
    boolean markMessagesAsReadByType(Integer receiverId, String msgType);

    /**
     * 发送点赞消息
     * @param postAuthorId 帖子作者ID
     * @param likerId 点赞用户ID
     * @param postId 帖子ID
     * @param giveId 点赞记录ID
     */
    void sendLikeMessage(Integer postAuthorId, Integer likerId, Integer postId, Integer giveId);

    /**
     * 发送评论消息
     * @param postAuthorId 帖子作者ID
     * @param commenterId 评论用户ID
     * @param postId 帖子ID
     * @param commentId 评论ID
     * @param commentContent 评论内容
     */
    void sendCommentMessage(Integer postAuthorId, Integer commenterId, Integer postId,
                            Integer commentId, String commentContent);

    /**
     * 发送帖子发布消息（系统通知作者）
     */
    void sendPostPublishMessage(Integer userId, Integer postId, String postTitle);

    /**
     * 发送帖子编辑消息（系统通知作者）
     */
    void sendPostEditMessage(Integer userId, Integer postId, String postTitle);
}